home *** CD-ROM | disk | FTP | other *** search
/ Java 1996 August / Java - Summer 1996.iso / kaffe-0.2 / lib / native / java.io / java.io.RandomAccessFile.c < prev    next >
C/C++ Source or Header  |  1996-02-11  |  3KB  |  159 lines

  1. /*
  2.  * java.io.RandomAccessFile.c
  3.  *
  4.  * Copyright (c) 1996 Systems Architecture Research Centre,
  5.  *           City University, London, UK.
  6.  *
  7.  * See the file "license.terms" for information on usage and redistribution
  8.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  9.  *
  10.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  11.  */
  12.  
  13. #include <stdio.h>
  14. #include <assert.h>
  15. #include "files.h"
  16. #include "java.io.RandomAccessFile.h"
  17. #include "java.io.FileDescriptor.h"
  18.  
  19. /*
  20.  * Open a file for random access.
  21.  */
  22. void
  23. java_io_RandomAccessFile_open(struct Hjava_io_RandomAccessFile* this, struct Hjava_lang_String* name, long /* bool */ rw)
  24. {
  25.     int fd;
  26.     char str[MAXPATHLEN];
  27.  
  28.     javaString2CString(name, str, sizeof(str));
  29.  
  30.     fd = open(str, (rw == 0 ? O_RDONLY : O_RDWR));
  31.     unhand(unhand(this)->fd)->fd = fd;
  32.     if (fd < 0) {
  33.         SignalError(0, "java.io.IOException", SYS_ERROR);
  34.     }
  35. }
  36.  
  37. /*
  38.  * Return length of file.
  39.  */
  40. long long
  41. java_io_RandomAccessFile_length(struct Hjava_io_RandomAccessFile* this)
  42. {
  43.     struct stat buf;
  44.     int r;
  45.  
  46.     r = fstat(unhand(unhand(this)->fd)->fd, &buf);
  47.     if (r < 0) {
  48.         SignalError(0, "java.io.IOException", SYS_ERROR);
  49.     }
  50.  
  51.     return (buf.st_size);
  52. }
  53.  
  54. /*
  55.  * Seek into file.
  56.  */
  57. void
  58. java_io_RandomAccessFile_seek(struct Hjava_io_RandomAccessFile* this, long long pos)
  59. {
  60.     int r;
  61.  
  62.     r = lseek(unhand(unhand(this)->fd)->fd, pos, SEEK_SET);
  63.     if (r < 0) {
  64.         SignalError(0, "java.io.IOException", SYS_ERROR);
  65.     }
  66. }
  67.  
  68. /*
  69.  * Read in bytes from file.
  70.  */
  71. long
  72. java_io_RandomAccessFile_readBytes(struct Hjava_io_RandomAccessFile* this, HArray* bytes, long off, long len)
  73. {
  74.     long ret;
  75.  
  76.     ret = read(unhand(unhand(this)->fd)->fd, &bytes->data[off], len);
  77.     if (ret < 0) {
  78.         SignalError(0, "java.io.IOException", SYS_ERROR);
  79.     }
  80.     return (ret);
  81. }
  82.  
  83. /*
  84.  * Read a byte from file.
  85.  */
  86. long
  87. java_io_RandomAccessFile_read(struct Hjava_io_RandomAccessFile* this)
  88. {
  89.     long ret;
  90.     unsigned char byte;
  91.  
  92.     ret = read(unhand(unhand(this)->fd)->fd, &byte, 1);
  93.     if (ret < 0) {
  94.         SignalError(0, "java.io.IOException", SYS_ERROR);
  95.     }
  96.  
  97.     return (byte);
  98. }
  99.  
  100. /*
  101.  * Write a byte to file.
  102.  */
  103. void
  104. java_io_RandomAccessFile_write(struct Hjava_io_RandomAccessFile* this, long data)
  105. {
  106.     long ret;
  107.     unsigned char byte;
  108.  
  109.     byte = data;
  110.  
  111.     ret = write(unhand(unhand(this)->fd)->fd, &byte, 1);
  112.     if (ret < 0) {
  113.         SignalError(0, "java.io.IOException", SYS_ERROR);
  114.     }
  115. }
  116.  
  117. /*
  118.  * Write a number of bytes to file.
  119.  */
  120. void
  121. java_io_RandomAccessFile_writeBytes(struct Hjava_io_RandomAccessFile* this, HArray* bytes, long off, long len)
  122. {
  123.     long ret;
  124.  
  125.     ret = write(unhand(unhand(this)->fd)->fd, &bytes->data[off], len);
  126.     if (ret < 0) {
  127.         SignalError(0, "java.io.IOException", SYS_ERROR);
  128.     }
  129. }
  130.  
  131. /*
  132.  * Get current file position.
  133.  */
  134. long long
  135. java_io_RandomAccessFile_getFilePointer(struct Hjava_io_RandomAccessFile* this)
  136. {
  137.     long long r;
  138.  
  139.     r = lseek(unhand(unhand(this)->fd)->fd, 0, SEEK_CUR);
  140.     if (r < 0) {
  141.         SignalError(0, "java.io.IOException", SYS_ERROR);
  142.     }
  143.     return (r);
  144. }
  145.  
  146. /*
  147.  * Close file.
  148.  */
  149. void
  150. java_io_RandomAccessFile_close(struct Hjava_io_RandomAccessFile* this)
  151. {
  152.     int r;
  153.  
  154.     r = close(unhand(unhand(this)->fd)->fd);
  155.     if (r < 0) {
  156.         SignalError(0, "java.io.IOException", SYS_ERROR);
  157.     }
  158. }
  159.